// 页面加载时执行
window.onload = function () {
    const sblsh = getUrlParam('sblsh');
    const type = getUrlParam('type');
    console.log("办件编号为： " + sblsh)
    console.log("办件类型为： " + type)
    // 关闭身份选择弹窗
    document.getElementById('roleSelectModal').style.display = 'none';
    // 打开证明数据页面
    document.querySelector('.container').style.display = 'block';
    // 模拟选择身份获取数据
    selectRole('staff')
};

// 初始化确认按钮状态
const securityButton = document.querySelector('.security-button');
securityButton.disabled = true;

// 监听验证码输入
document.getElementById('verifyCode').addEventListener('input', function (e) {
    securityButton.disabled = e.target.value.length !== 6;
});

// 获取URL参数
function getUrlParam(name) {
    const urlParams = new URLSearchParams(window.location.search);
    return urlParams.get(name);
}

// 显示加载状态
function showLoading() {
    document.getElementById('loading').style.display = 'flex';
}

// 隐藏加载状态
function hideLoading() {
    document.getElementById('loading').style.display = 'none';
}

// 更新页面数据
function updatePageData(data) {
    console.log('更新页面数据：', data);
    document.getElementById('headerName').textContent = data.itemName;
    document.getElementById('fileType').textContent = data.itemName;
    document.getElementById('fileNo').textContent = data.sblsh;
    document.getElementById('issueDate').textContent = data.sbsj;
    document.getElementById('issueUnit').textContent = data.sjdw ? data.sjdw : '阳泉市局';
    document.getElementById('expireDate').textContent = data.effectiveTime ? getDeadLine(data) : (() => {
        const createDate = new Date(data.createDate);
        createDate.setFullYear(createDate.getFullYear() + 1);
        return createDate.toISOString().replace('T', ' ').substring(0, 19);
    })();
    document.getElementById('applicant').textContent = data.sqrmc;
}

function updatePageDataDefault() {
    return updatePageData({
        itemName: '验证失败',
        sblsh: '--',
        sbsj: '--',
        createDate: '--',
        sqrmc: '--'
    });
}

// 获取API前缀
function getApiPrefix() {
    try {
        const url = new URL(window.location.href);
        return `${url.protocol}//${url.host}/jcbmapi/`;
    } catch (error) {
        console.log('无法从当前URL获取API前缀，使用默认值');
        return 'http://localhost:8082';
    }
}
function getDeadLine(row) {
    // 使用moment.js解析日期并加减天数
    return moment(row.bjsj).add(row.effectiveTime, 'days').format('YYYY-MM-DD HH:mm:ss');
}

// 获取证明数据
async function fetchProofData(sblsh) {
    showLoading();
    const apiPrefix = getApiPrefix();
    const url = new URL(`${apiPrefix}/api/zm/service/getItemAcceptDetail`);
    generateAuthParams(url);

    const result = await request(url, { 'sblsh': sblsh }, "GET").catch(error => {
        console.log('获取数据失败，显示默认值');
        result.data = updatePageDataDefault();
        return null;
    });
    hideLoading();
    if (!result.data) {
        result.data = updatePageDataDefault();
    };
    return result.data;
}

// 修改选择身份的函数
async function selectRole(role) {
    console.log('选择的身份为：' + role);
    let sblsh = getUrlParam('sblsh');
    let type = getUrlParam('type');
    let phone = "15903497335"
    if (sblsh) {
        resultData = await fetchProofData(sblsh);
        if (role == 'staff') {
            // 使用默认手机号(工作人员)
            phone = "15903497335"
        } else {
            // 使用申请人手机号
            phone = resultData.lxrsj;
        }
        // document.getElementById('securityModal').style.display = 'block';

        // document.getElementById('phoneNumber').textContent = maskPhoneNumber(phone);
        // 自动发送验证码
        // sendVerifyCode();
        // 更新页面数据
        updatePageData(resultData);
        // 添加水印
        addWatermark('阳泉基层便民服务平台');
    } else {
        alert('未找到证明办件编号');
    }
    document.getElementById('roleSelectModal').style.display = 'none';
}

// 发送验证码
async function sendVerifyCode() {
    const button = document.getElementById('getVerifyCode');
    button.disabled = true;

    const apiPrefix = getApiPrefix();
    const url = new URL(`${apiPrefix}/api/sms/send`);
    generateAuthParams(url);

    const result = await request(url, { 'phone': "15903497335" }, "POST").catch(error => {
        button.disabled = false;
        button.textContent = '获取验证码';
        alert('发送验证码失败:', error);
        return null;
    });

    if (!result) return;

    // 请求成功后启动倒计时
    let countdown = 60;
    const timer = setInterval(() => {
        if (countdown > 0) {
            button.textContent = `${countdown}秒后重试`;
            countdown--;
        } else {
            button.disabled = false;
            button.textContent = '获取验证码';
            clearInterval(timer);
        }
    }, 1000);
}

let resultData;
// 确认验证
async function confirmVerification() {
    const verifyCode = document.getElementById('verifyCode').value;
    if (!verifyCode || verifyCode.length !== 6) {
        alert('请输入6位验证码');
        return false;
    }

    const apiPrefix = getApiPrefix();
    const url = new URL(`${apiPrefix}/api/sms/validated`);
    generateAuthParams(url);

    const result = await request(url, { 'phone': "15903497335", 'phoneCode': verifyCode }, "POST").catch(error => {
        alert(error.message || '验证失败');
        return null;
    });

    if (!result) return false;

    // 验证成功后显示证明详情
    document.getElementById('securityModal').style.display = 'none';
    document.querySelector('.container').style.display = 'block';
    // 更新页面数据
    updatePageData(resultData);
    // 添加水印
    addWatermark('阳泉基层便民服务平台');
    return true;
}

// 显示其他验证方式
function showOtherVerifyMethod() {
    // TODO: 实现其他验证方式的逻辑
    alert('暂不支持其他验证方式');
}

// 手机号脱敏
function maskPhoneNumber(phone) {
    if (!phone) return '';
    return phone.toString().replace(/^(\d{3})\d{4}(\d{4})$/, '$1****$2');
}

// 添加水印
function addWatermark(text) {
    // 创建水印容器
    const watermarkDiv = document.createElement('div');
    watermarkDiv.className = 'watermark';

    // 计算需要的水印数量
    const screenWidth = window.innerWidth;
    const screenHeight = window.innerHeight;
    const itemWidth = 300; // 每个水印项的大致宽度
    const itemHeight = 200; // 每个水印项的大致高度
    const cols = Math.ceil(screenWidth / itemWidth);
    const rows = Math.ceil(screenHeight / itemHeight);

    // 创建水印项
    for (let i = 0; i < rows; i++) {
        for (let j = 0; j < cols; j++) {
            const watermarkItem = document.createElement('div');
            watermarkItem.className = 'watermark-item';
            watermarkItem.textContent = text;
            watermarkItem.style.left = j * itemWidth + 'px';
            watermarkItem.style.top = i * itemHeight + 'px';
            watermarkDiv.appendChild(watermarkItem);
        }
    }

    // 添加到页面
    document.body.appendChild(watermarkDiv);

    // 监控DOM变化，防止水印被删除
    const observer = new MutationObserver(() => {
        if (!document.querySelector('.watermark')) {
            document.body.appendChild(watermarkDiv.cloneNode(true));
        }
    });
    observer.observe(document.body, { childList: true, subtree: true });
}


// 通用请求处理方法
async function request(url, params = {}, method = 'GET') {
    const options = {
        method: method.toUpperCase(),
        headers: {
            'Content-Type': 'application/json'
        }
    };

    // 处理请求参数
    if (method.toUpperCase() === 'GET') {
        // GET请求：将参数添加到URL
        Object.keys(params).forEach(key => {
            url.searchParams.append(key, params[key]);
        });
    } else if (method.toUpperCase() === 'POST') {
        // POST请求：将参数放在请求体中
        options.body = JSON.stringify(params);
    }

    const response = await fetch(url.toString(), options);
    if (!response.ok) {
        console.error('请求失败:', response.status);
        throw new Error(`HTTP error! status: ${response.status}`);
    }

    // 获取响应头中的加密AES密钥
    const keyStr = response.headers.get('encrypt-key');
    const resultData = await response.text();
    let jsonData;

    // 如果存在加密的AES密钥，进行解密处理
    if (keyStr != null && keyStr !== '') {
        // 解密AES密钥
        const base64Str = decrypt(keyStr);
        if (!base64Str) {
            console.error('AES密钥解密失败');
            throw new Error('AES密钥解密失败');
        }
        // base64解码得到AES密钥
        const aesKey = decryptBase64(base64Str);
        // 使用AES密钥解密响应数据
        const decryptData = decryptWithAes(resultData, aesKey);
        if (!decryptData) {
            console.error('响应数据解密失败');
            throw new Error('响应数据解密失败');
        }
        // 解析JSON字符串
        jsonData = JSON.parse(decryptData);
    } else {
        // 直接解析JSON字符串
        jsonData = JSON.parse(resultData);
    }

    if (!jsonData || jsonData.code !== 200) {
        const errorMessage = jsonData ? jsonData.msg : '获取数据失败';
        console.error('数据处理失败:', errorMessage);
        throw new Error(errorMessage);
    }

    return jsonData;
}